﻿namespace KingerRobot.MexicoSailunMDC.SpiService;
internal interface IWcsLocSku
{
    /// <summary>
    /// 根据库位集合获取SKU
    /// </summary>
    /// <param name="locIds"></param>
    /// <returns></returns>
    List<POWcsLocSku> GetWcsLocSkuByLocIds(List<long?> locIds);
    /// <summary>
    /// 获得所有的绑定信息
    /// </summary>
    /// <returns></returns>
    List<POWcsLocSku> GetWcsLocSkus();
    /// <summary>
    /// 删除位置跟踪记录
    /// </summary>
    /// <param name="skuId"></param>
    /// <returns></returns>
    int DeleteWcsLocSkuBySku(long? skuId);
    /// <summary>
    /// 通过位置和Skuid删除绑定
    /// </summary>
    /// <param name="skuId"></param>
    /// <param name="locId"></param>
    /// <returns></returns>
    int DeleteWcsLocSkuBySkuLoc(long? skuId, long? locId);
    /// <summary>
    /// 通过位置删除
    /// </summary>
    /// <param name="locId"></param>
    /// <returns></returns>
    int DeleteWcsLocSkuByLoc(long? locId);
    /// <summary>
    /// 添加跟踪记录
    /// </summary>
    /// <param name="locId"></param>
    /// <param name="skuId"></param>
    /// <returns></returns>
    int AddWcsLocSku(long? locId, long? skuId);

    /// <summary>
    /// 跟踪记录
    /// </summary>
    /// <param name="locId"></param>
    /// <param name="skuId"></param>
    /// <returns></returns>
    int SetWcsLocSku(long? locId, long? skuId, bool isDelLoc = false);

    /// <summary>
    /// 通过位置查找“所有”
    /// </summary>
    /// <param name="locId"></param>
    /// <returns></returns>
    POWcsLocSku GetWcsLocSkuByLocId(long? locId);
    /// <summary>
    /// 通过位置查找“没有任务”
    /// </summary>
    /// <param name="locId"></param>
    /// <returns></returns>
    POWcsLocSku GetWcsLocSkuNoTaskByLocId(long? locId);
    /// <summary>
    /// 通过位置查找“没有任务”
    /// </summary>
    /// <param name="skuId"></param>
    /// <returns></returns>
    POWcsLocSku GetWcsLocSkuNoTaskBySkuId(long? skuId, long locId);
    /// <summary>
    /// 设置任务ID
    /// </summary>
    /// <param name="skuId"></param>
    /// <param name="taskId"></param>
    /// <returns></returns>
    int UpdateWcsLocSkuTask(long skuId, long taskId);

    /// <summary>
    /// 获取绑定货位
    /// </summary>
    /// <param name="locIds"></param>
    /// <returns></returns>
    List<POWcsLocSku> GetWcsLocSkusByLocIds(List<long> locIds);

    /// <summary>
    /// 通过产品条码集合获取绑定货位信息
    /// </summary>
    /// <param name="codes"></param>
    /// <returns></returns>
    (List<WcsLocSkuBean>, List<POProdSkuProduct>, List<POWcsLocSku>, List<POWcsEquipLocHold>, List<POProdProduct>) GetWcsLocSkuBeansByCodes(List<string> codes);
    /// <summary>
    /// 通过<see langword="skuId"/>获取<see cref="POWcsLocSku"/>
    /// </summary>
    /// <param name="skuId"></param>
    /// <returns></returns>
    POWcsLocSku GetWcsLocSkuBySkuId(long? skuId);
    /// <summary>
    /// 获取所有绑定关系
    /// </summary>
    /// <param name="skuId"></param>
    /// <returns></returns>
    List<POWcsLocSku> GetWcsLocSkusBySkuId(long? skuId);
}

public class WcsLocSkuBean
{
    public POWcsLocSku WcsLocSku { get; set; }
    public POProdProduct ProdProduct { get; set; }
    public POProdSkuProduct SkuProduct { get; set; }

    public POProdMaterial ProdMaterial { get; set; }
}
